package xyz.mumuwei.youthcourseserver.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.quartz.SchedulerException;
import xyz.mumuwei.youthcourseserver.common.dto.PageDto;
import xyz.mumuwei.youthcourseserver.common.lang.Result;
import xyz.mumuwei.youthcourseserver.pojo.StudentExperience;

/**
 * @author mumuwei
 * @since 2022-02-19
 */
public interface StudentExperienceService extends IService<StudentExperience> {

    /**
     * 学生预约 体验课程
     * @param courseId 课程id
     * @param uid 用户账户id
     * @return 预约结果
     * @throws SchedulerException 定时任务异常
     */
    Result reserveCourseByStudent(Integer courseId, Integer uid) throws SchedulerException;

    /**
     * 根据学生账户id 和 课程id 查询学生是否预约该课程
     * @param courseId 课程id
     * @param uid 学生账户Id
     * @return 查询结果
     */
    Result checkReserveByCourseId(Integer courseId, Integer uid);

    /**
     * 根据学生账户 Id 和 课程Id 删除体验预约
     * @param courseId 课程id
     * @param uid 学生账户Id
     * @return 删除结果
     * @throws SchedulerException 定时任务异常
     */
    Result deleteByCourseId(Integer courseId, Integer uid) throws SchedulerException;

    /**
     * 根据学生账户id 获取学生预约课程列表
     * @param uid 账户id
     * @return 预约列表
     */
    Result getStudentExperienceList(Integer uid);

    /**
     * 根据课程id获取课程预约体验课列表（不分页）
     * @param courseId 课程id
     * @return 预约列表
     */
    Result getExperienceListByCourseId(Integer courseId);

    /**
     * 根据课程id获取课程预约体验课列表（分页）
     * @param courseId 课程id
     * @param pageDto 分页参数
     * @return 预约列表
     */
    Result getExperiencePageByCourseId(Integer courseId, PageDto pageDto);
}
